﻿using System;
using System.IO;
using System.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Security;

namespace PickGold.Nulls
{
	/// <summary>
	/// NullTextReader
	/// </summary>
	public sealed class NullTextReader : TextReader
	{
		/// <summary>
		/// 唯一实例
		/// </summary>
		public readonly static TextReader Value = new NullTextReader();

		private NullTextReader()
		{
			if (Value != null)
				throw new InvalidOperationException();
		}

		// 摘要:
		//     关闭 System.IO.TextReader 并释放与该 TextReader 关联的所有系统资源。
		//public override void Close();
		//
		// 摘要:
		//     释放由 System.IO.TextReader 占用的非托管资源，还可以另外再释放托管资源。
		//
		// 参数:
		//   disposing:
		//     为 true 则释放托管资源和非托管资源；为 false 则仅释放非托管资源。
		//protected override void Dispose(bool disposing);
		//
		// 摘要:
		//     读取下一个字符，而不更改读取器状态或字符源。返回下一个可用字符，而实际上并不从输入流中读取此字符。
		//
		// 返回结果:
		//     一个整数，它表示下一个要读取的字符，或者如果没有更多的可用字符或此流不支持查找，则为 -1。
		//
		// 异常:
		//   System.ObjectDisposedException:
		//     System.IO.TextReader 是关闭的。
		//
		//   System.IO.IOException:
		//     发生 I/O 错误。
		public override int Peek()
		{
			return -1;
		}
		//
		// 摘要:
		//     读取输入流中的下一个字符并使该字符的位置提升一个字符。
		//
		// 返回结果:
		//     输入流中的下一个字符，或者如果没有更多的可用字符，则为 -1。默认实现将返回 -1。
		//
		// 异常:
		//   System.ObjectDisposedException:
		//     System.IO.TextReader 是关闭的。
		//
		//   System.IO.IOException:
		//     发生 I/O 错误。
		public override int Read()
		{
			return -1;
		}
		//
		// 摘要:
		//     从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。
		//
		// 参数:
		//   buffer:
		//     此方法返回时，包含指定的字符数组，该数组的 index 和 (index + count - 1) 之间的值由从当前源中读取的字符替换。
		//
		//   index:
		//     buffer 中开始写入的位置。
		//
		//   count:
		//     最多读取的字符数。如果在将 count 个字符读入 buffer 之前已到达流的末尾，则当前方法将返回。
		//
		// 返回结果:
		//     已读取的字符数。该数小于或等于 count，具体取决于流中是否有可用的数据。如果调用此方法时没有更多的字符留下可供读取，则此方法返回 0。
		//
		// 异常:
		//   System.ArgumentNullException:
		//     buffer 为 null。
		//
		//   System.ArgumentException:
		//     缓冲区长度减去 index 小于 count。
		//
		//   System.ArgumentOutOfRangeException:
		//     index 或 count 为负。
		//
		//   System.ObjectDisposedException:
		//     System.IO.TextReader 是关闭的。
		//
		//   System.IO.IOException:
		//     发生 I/O 错误。
		public override int Read(char[] buffer, int index, int count)
		{
			return 0;
		}
		//
		// 摘要:
		//     从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。
		//
		// 参数:
		//   buffer:
		//     此方法返回时，此参数包含指定的字符数组，该数组中从 index 到 (index + count -1) 之间的值由从当前源中读取的字符替换。
		//
		//   index:
		//     buffer 中开始读取的位置。
		//
		//   count:
		//     最多读取的字符数。
		//
		// 返回结果:
		//     基础流的位置由读入 buffer 的字符编号提前。已读取的字符数。该数字将小于或等于 count，具体取决于是否所有的输入字符都已读取。
		//
		// 异常:
		//   System.ArgumentNullException:
		//     buffer 为 null。
		//
		//   System.ArgumentException:
		//     缓冲区长度减去 index 小于 count。
		//
		//   System.ArgumentOutOfRangeException:
		//     index 或 count 为负。
		//
		//   System.ObjectDisposedException:
		//     System.IO.TextReader 是关闭的。
		//
		//   System.IO.IOException:
		//     发生 I/O 错误。
		public override int ReadBlock(char[] buffer, int index, int count)
		{
			return 0;
		}
		//
		// 摘要:
		//     从当前流中读取一行字符并将数据作为字符串返回。
		//
		// 返回结果:
		//     输入流的下一行，或者如果已读取了所有字符，则为 null。
		//
		// 异常:
		//   System.IO.IOException:
		//     发生 I/O 错误。
		//
		//   System.OutOfMemoryException:
		//     内存不足，无法为返回的字符串分配缓冲区。
		//
		//   System.ObjectDisposedException:
		//     System.IO.TextReader 是关闭的。
		//
		//   System.ArgumentOutOfRangeException:
		//     下一行中的字符数大于 System.Int32.MaxValue
		public override string ReadLine()
		{
			return null;
		}
		//
		// 摘要:
		//     读取从当前位置到 TextReader 的结尾的所有字符并将它们作为一个字符串返回。
		//
		// 返回结果:
		//     包含从当前位置到 TextReader 的结尾的所有字符的字符串。
		//
		// 异常:
		//   System.IO.IOException:
		//     发生 I/O 错误。
		//
		//   System.ObjectDisposedException:
		//     System.IO.TextReader 是关闭的。
		//
		//   System.OutOfMemoryException:
		//     内存不足，无法为返回的字符串分配缓冲区。
		//
		//   System.ArgumentOutOfRangeException:
		//     下一行中的字符数大于 System.Int32.MaxValue
		public override string ReadToEnd()
		{
			return null;
		}
	}
}
